#include "udpserver.hpp"
#include <memory>


// int main()
// {
//     EnableScreen();
//     uint16_t port = 8899;
//     std::string ip = "127.0.0.1";
//     // C++14标准
//     // 定义智能指针时，同样需要保证这个智能指针对象不会给其它对象进行拷贝构造
//     // 所以使用了unque_ptr这个对象
//     std::unique_ptr<udpServer> usvr = std::make_unique<udpServer>(ip, port);
//     usvr->initServer();
//     usvr->start();
//
//     return 0;
// }

//  注意: 下述的程序设计了几个参数，在调用udpServer这个类的构造函数时，
//        可以通过如下程序直接 将  客户端的IP地址和端口号  与 对象定义的套接字进行绑定
//        但是在命令窗口写下执行语句时会出现以下情况
//  case1: 执行语句为 ./udpserver [客户端对应的公网IP地址] [服务器双方约定的端口号]
//         无法执行，首先，如果服务器端是云服务器，(这里不讨论客户端的情况)
//                        无论是ssh登录时的 IP地址，还是ifconfig找到的地址，都不支持绑定
//                  其次，如果服务器端是虚拟机，
//                       使用虚拟机作为服务器进行实验，可以支持case1执行的语句，但是不建议这种做法
//  case2: 执行语句为 ./udpserver 0 [服务器双方约定的端口号]
//         此时 服务器端将会接收所有所有端口号为 约定端口号的 报文
//
// ./udpserver local-ip local-port
// ./udpserver 0 8888
int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        std::cerr << "Usage: " << argv[0] << "local-ip local-port" << std::endl;
        exit(1);
    }

    uint16_t localport = std::stoi(argv[1]);

    EnableScreen();
    // std::unique_ptr<udpServer> usvr = std::make_unique<udpServer>(localip, localport);
    std::unique_ptr<udpServer> usvr = std::make_unique<udpServer>(localport);
    usvr->initServer();
    usvr->start();

    return 0;
}